mxn10_plot <- ggplot(data = mxn10,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = mxn10_axis_set$chr,
breaks = mxn10_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(mxn10_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 10,000 Step 2,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn10_plot

mxn50_plot <- ggplot(data = mxn50,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(mxn50_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_plot

### Regions of Interest ###
## Looking at Chromosomes with Fst of 0.25 or greater ##
mxn50_chr1_plot <- ggplot(data = filter(mxn50, chr == "NC_055957.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr1_plot

mxn50_chr2_plot <- ggplot(data = filter(mxn50, chr == "NC_055958.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr2_plot

mxn50_chr3_plot <- ggplot(data = filter(mxn50, chr == "NC_055959.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr3_plot

mxn50_chr10_plot <- ggplot(data = filter(mxn50, chr == "NC_055966.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr10_plot

mxn50_chr12_plot <- ggplot(data = filter(mxn50, chr == "NC_055968.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr12_plot

mxn50_chr19_plot <- ggplot(data = filter(mxn50, chr == "NC_055975.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = mxn50_axis_set$chr,
breaks = mxn50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr19_plot

### Chromosome 2 Spike Region ###
mxn50_spike_plot <- mxn50 %>%
filter(chr == "NC_055958.1") %>%
filter(midPos >= 16600000) %>%
filter(midPos <= 17000000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Mid-Atlantic vs N. Atlantic Anadromous Alewife Chromosome 2",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_spike_plot

### Chromosome 3 "spike" region ###
mxn50_chr3_spike_plot <- mxn50 %>%
filter(chr == "NC_055959.1") %>%
filter(midPos >= 24600000) %>%
filter(midPos <= 24800000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#242b35") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Southern vs Northern Anadromous Alewife Chromosome 3",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr3_spike_plot

### Chromosome 19 "spike" region ###
mxn50_chr19_spike_plot <- mxn50 %>%
filter(chr == "NC_055975.1") %>%
filter(midPos >= 2250000) %>%
filter(midPos <= 8420000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Southern vs Northern Anadromous Alewife Chromosome 19",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxn50_chr19_spike_plot

mxg10_plot <- ggplot(data = mxg10,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = mxg10_axis_set$chr,
breaks = mxg10_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(mxg10_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 10,000 Step 2,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg10_plot

mxg50_plot <- ggplot(data = mxg50,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(mxg50_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_plot

### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
mxg50_chr1_plot <- ggplot(data = filter(mxg50, chr == "NC_055957.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr1_plot

mxg50_chr2_plot <- ggplot(data = filter(mxg50, chr == "NC_055958.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr2_plot

mxg50_chr3_plot <- ggplot(data = filter(mxg50, chr == "NC_055959.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr3_plot

mxg50_chr10_plot <- ggplot(data = filter(mxg50, chr == "NC_055966.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr10_plot

mxg50_chr12_plot <- ggplot(data = filter(mxg50, chr == "NC_055968.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr12_plot

mxg50_chr19_plot <- ggplot(data = filter(mxg50, chr == "NC_055975.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = mxg50_axis_set$chr,
breaks = mxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr19_plot

### Chromosome 2 Spike Region ###
mxg50_spike_plot <- mxg50 %>%
filter(chr == "NC_055958.1") %>%
filter(midPos >= 16600000) %>%
filter(midPos <= 17000000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Mid-Atlantic Anadromous vs Great Lakes Landlocked Alewife Chromosome 2",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_spike_plot

### Chromosome 3 "spike" region ###
mxg50_chr3_spike_plot <- mxg50 %>%
filter(chr == "NC_055959.1") %>%
filter(midPos >= 24600000) %>%
filter(midPos <= 24800000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#242b35") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Southern vs Northern Anadromous Alewife Chromosome 3",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr3_spike_plot

### Chromosome 19 "spike" region ###
mxg50_chr19_spike_plot <- mxg50 %>%
filter(chr == "NC_055975.1") %>%
filter(midPos >= 2250000) %>%
filter(midPos <= 8420000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Mid-Atlantic vs. Great Lakes Landlocked Alewife Chromosome 19",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxg50_chr19_spike_plot

nxg10_plot <- ggplot(data = nxg10,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = nxg10_axis_set$chr,
breaks = nxg10_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(nxg10_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 10,000 Step 2,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg10_plot

nxg50_plot <- ggplot(data = nxg50,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(nxg50_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_plot

### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
nxg50_chr1_plot <- ggplot(data = filter(nxg50, chr == "NC_055957.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr1_plot

nxg50_chr2_plot <- ggplot(data = filter(nxg50, chr == "NC_055958.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr2_plot

nxg50_chr3_plot <- ggplot(data = filter(nxg50, chr == "NC_055959.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr3_plot

nxg50_chr10_plot <- ggplot(data = filter(nxg50, chr == "NC_055966.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr10_plot

nxg50_chr12_plot <- ggplot(data = filter(nxg50, chr == "NC_055968.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr12_plot

nxg50_chr19_plot <- ggplot(data = filter(nxg50, chr == "NC_055975.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = nxg50_axis_set$chr,
breaks = nxg50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr19_plot

# Fst > 0.75 @ 5945000 - 5975000
### Chromosome 2 Spike Region ###
nxg50_spike_plot <- nxg50 %>%
filter(chr == "NC_055958.1") %>%
filter(midPos >= 16600000) %>%
filter(midPos <= 17000000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "N. Atlantic Anadromous vs Great Lakes Landlocked Alewife Chromosome 2",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_spike_plot

### Chromosome 3 "spike" region ###
nxg50_chr3_spike_plot <- nxg50 %>%
filter(chr == "NC_055959.1") %>%
filter(midPos >= 24600000) %>%
filter(midPos <= 24800000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#242b35") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "N. Atlantic vs. Great Lakes Landlocked Alewife Chromosome 3",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr3_spike_plot

### Chromosome 19 "spike" region ###
nxg50_chr19_spike_plot <- nxg50 %>%
filter(chr == "NC_055975.1") %>%
filter(midPos >= 2250000) %>%
filter(midPos <= 8420000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "N. Atlantic vs. Great Lakes Landlocked Alewife Chromosome 19",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxg50_chr19_spike_plot

mxf10_plot <- ggplot(data = mxf10,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = mxf10_axis_set$chr,
breaks = mxf10_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(mxf10_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 10,000 Step 2,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf10_plot

mxf50_plot <- ggplot(data = mxf50,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = mxf50_axis_set$chr,
breaks = mxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(mxf50_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_plot

### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
mxf50_chr1_plot <- ggplot(data = filter(mxf50, chr == "NC_055957.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxf50_axis_set$chr,
breaks = mxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_chr1_plot

mxf50_chr2_plot <- ggplot(data = filter(mxf50, chr == "NC_055958.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = mxf50_axis_set$chr,
breaks = mxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_chr2_plot

mxf50_chr3_plot <- ggplot(data = filter(mxf50, chr == "NC_055959.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxf50_axis_set$chr,
breaks = mxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_chr3_plot

mxf50_chr10_plot <- ggplot(data = filter(mxf50, chr == "NC_055966.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxf50_axis_set$chr,
breaks = mxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_chr10_plot

mxf50_chr12_plot <- ggplot(data = filter(mxf50, chr == "NC_055968.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = mxf50_axis_set$chr,
breaks = mxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_chr12_plot

### Chromosome 2 Spike Region ###
mxf50_spike_plot <- mxf50 %>%
filter(chr == "NC_055958.1") %>%
filter(midPos >= 16600000) %>%
filter(midPos <= 17000000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "Mid-Atlantic Anadromous vs Finger Lakes Landlocked Alewife Chromosome 2",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
mxf50_spike_plot

nxf10_plot <- ggplot(data = nxf10,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = nxf10_axis_set$chr,
breaks = nxf10_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(nxf10_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 10,000 Step 2,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf10_plot

nxf50_plot <- ggplot(data = nxf50,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = nxf50_axis_set$chr,
breaks = nxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(nxf50_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_plot

### Regions of Interest ###
## Looking at the same chromosomes for MIDA vs NATLA ##
nxf50_chr1_plot <- ggplot(data = filter(nxf50, chr == "NC_055957.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxf50_axis_set$chr,
breaks = nxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_chr1_plot

nxf50_chr2_plot <- ggplot(data = filter(nxf50, chr == "NC_055958.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#869ca8") +
scale_x_continuous(label = nxf50_axis_set$chr,
breaks = nxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_chr2_plot

nxf50_chr3_plot <- ggplot(data = filter(nxf50, chr == "NC_055959.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxf50_axis_set$chr,
breaks = nxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_chr3_plot

nxf50_chr10_plot <- ggplot(data = filter(nxf50, chr == "NC_055966.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxf50_axis_set$chr,
breaks = nxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_chr10_plot

nxf50_chr12_plot <- ggplot(data = filter(nxf50, chr == "NC_055968.1"),
mapping = aes(x = pos_cum,
y = Fst)) +
geom_point(alpha = 0.75, size = 0.5, color = "#242b35") +
scale_x_continuous(label = nxf50_axis_set$chr,
breaks = nxf50_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
labs(x = NULL,
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_chr12_plot

### Chromosome 2 Spike Region ###
nxf50_spike_plot <- nxf50 %>%
filter(chr == "NC_055958.1") %>%
filter(midPos >= 16600000) %>%
filter(midPos <= 17000000) %>%
ggplot(.,
mapping = aes(x = midPos,
y = Fst,
size = Nsites)) +
geom_point(alpha = 0.75, color = "#869ca8") +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_size_continuous(range = c(0.5, 3)) +
labs(x = "Position",
y = "Fst",
title = "N. Atlantic Anadromous vs Finger Lakes Landlocked Alewife Chromosome 2",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
nxf50_spike_plot

### Using ggsave to save the manhattan plots, or as I will now refer to it: ###
# Saving Private Plots (Ryan lol) ##
ggsave("figures/sliding-windows-fst/NATLA-x-GRTL-sz50-chrom10.png",
plot = nxg50_chr10_plot,
width = 10,
height = 4)
LS0tCnRpdGxlOiAiU2xpZGluZyBXaW5kb3dzIEFuYWx5c2lzIgpzdWJ0aXRsZTogIkFsZXdpZmUgUG9wdWxhdGlvbnMgb2YgSW50ZXJlc3QgU3Vic2V0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG8gPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2d0ZXh0KQpgYGAKCmBgYHtyIGRhdGFfb3JnLCBlY2hvID0gRkFMU0V9CmNvbHMgPC0gYygicmVnaW9uIiwgCiAgICAgICAgICAiY2hyIiwgCiAgICAgICAgICAibWlkUG9zIiwgCiAgICAgICAgICAiTnNpdGVzIiwgCiAgICAgICAgICAiRnN0IikKCgojIyMgTWlkLUF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm14ZjEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tRklOTC0tc2l6ZS0xMDAwMC0tc3RlcC0yMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbXhmMTBfY3VtIDwtIG14ZjEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpteGYxMCA8LSBteGYxMCAlPiUKICBpbm5lcl9qb2luKG14ZjEwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbXhmMTBfYXhpc19zZXQgPC0gbXhmMTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIFNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwICMjCm14ZjUwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tRklOTC0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm14ZjUwX2N1bSA8LSBteGY1MCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbXhmNTAgPC0gbXhmNTAgJT4lCiAgaW5uZXJfam9pbihteGY1MF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm14ZjUwX2F4aXNfc2V0IDwtIG14ZjUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKIyMjIE5vcnRoZXJuIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm54ZjEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTkFUTEEtLXgtLUZJTkwtLXNpemUtMTAwMDAtLXN0ZXAtMjAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm54ZjEwX2N1bSA8LSBueGYxMCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbnhmMTAgPC0gbnhmMTAgJT4lCiAgaW5uZXJfam9pbihueGYxMF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm54ZjEwX2F4aXNfc2V0IDwtIG54ZjEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgojIyBTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCAjIwpueGY1MCA8LSByZWFkX2RlbGltKCJkYXRhL3N1bW1hcml6ZWQvc2xpZGluZ193aW5kb3dfZnN0L05BVExBLS14LS1GSU5MLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbnhmNTBfY3VtIDwtIG54ZjUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpueGY1MCA8LSBueGY1MCAlPiUKICBpbm5lcl9qb2luKG54ZjUwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbnhmNTBfYXhpc19zZXQgPC0gbnhmNTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCgojIyMgTm9ydGhlcm4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSAjIyMKIyMgU2l6ZSAxMCwwMDAgU3RlcCAyLDAwMCAjIwpueGcxMCA8LSByZWFkX2RlbGltKCJkYXRhL3N1bW1hcml6ZWQvc2xpZGluZ193aW5kb3dfZnN0L05BVExBLS14LS1HUlRMLS1zaXplLTEwMDAwLS1zdGVwLTIwMDAudHN2IiwgCiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDIsIAogICAgICAgICAgICAgICAgICAgIGRlbGltID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gY29scywKICAgICAgICAgICAgICAgICAgICBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpueGcxMF9jdW0gPC0gbnhnMTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCm54ZzEwIDwtIG54ZzEwICU+JQogIGlubmVyX2pvaW4obnhnMTBfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpueGcxMF9heGlzX3NldCA8LSBueGcxMCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShjZW50ZXIgPSBtZWFuKHBvc19jdW0pKQoKIyMgU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAgIyMKbnhnNTAgPC0gcmVhZF9kZWxpbSgiZGF0YS9zdW1tYXJpemVkL3NsaWRpbmdfd2luZG93X2ZzdC9OQVRMQS0teC0tR1JUTC0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm54ZzUwX2N1bSA8LSBueGc1MCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbnhnNTAgPC0gbnhnNTAgJT4lCiAgaW5uZXJfam9pbihueGc1MF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm54ZzUwX2F4aXNfc2V0IDwtIG54ZzUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKIyMjIE1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIEFsZXdpZmUgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm14ZzEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tR1JUTC0tc2l6ZS0xMDAwMC0tc3RlcC0yMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbXhnMTBfY3VtIDwtIG14ZzEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpteGcxMCA8LSBteGcxMCAlPiUKICBpbm5lcl9qb2luKG14ZzEwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbXhnMTBfYXhpc19zZXQgPC0gbXhnMTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIFNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwICMjCm14ZzUwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tR1JUTC0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm14ZzUwX2N1bSA8LSBteGc1MCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbXhnNTAgPC0gbXhnNTAgJT4lCiAgaW5uZXJfam9pbihteGc1MF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm14ZzUwX2F4aXNfc2V0IDwtIG14ZzUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgoKIyMjIE1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIEFsZXdpZmUgdnMgTm9ydGhlcm4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlICMjIwojIyBTaXplIDEwLDAwMCBTdGVwIDIsMDAwICMjCm14bjEwIDwtIHJlYWRfZGVsaW0oImRhdGEvc3VtbWFyaXplZC9zbGlkaW5nX3dpbmRvd19mc3QvTUlEQS0teC0tTkFUTEEtLXNpemUtMTAwMDAtLXN0ZXAtMjAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCm14bjEwX2N1bSA8LSBteG4xMCAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKbXhuMTAgPC0gbXhuMTAgJT4lCiAgaW5uZXJfam9pbihteG4xMF9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCm14bjEwX2F4aXNfc2V0IDwtIG14bjEwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgojIyBTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCAjIwpteG41MCA8LSByZWFkX2RlbGltKCJkYXRhL3N1bW1hcml6ZWQvc2xpZGluZ193aW5kb3dfZnN0L01JREEtLXgtLU5BVExBLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKbXhuNTBfY3VtIDwtIG14bjUwICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpteG41MCA8LSBteG41MCAlPiUKICBpbm5lcl9qb2luKG14bjUwX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKbXhuNTBfYXhpc19zZXQgPC0gbXhuNTAgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCmBgYAoKCmBgYHtyIE1JREFfeF9OQVRMQV9wbG90c30KbXhuMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14bjEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14bjEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14bjEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteG4xMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgdnMgTi4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDEwLDAwMCBTdGVwIDIsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14bjEwX3Bsb3QKCm14bjUwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBteG41MCwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteG41MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteG41MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgobXhuNTBfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfcGxvdAoKIyMjIFJlZ2lvbnMgb2YgSW50ZXJlc3QgIyMjCiMjIExvb2tpbmcgYXQgQ2hyb21vc29tZXMgd2l0aCBGc3Qgb2YgMC4yNSBvciBncmVhdGVyICMjCm14bjUwX2NocjFfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteG41MCwgY2hyID09ICJOQ18wNTU5NTcuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMV9wbG90CgpteG41MF9jaHIyX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhuNTAsIGNociA9PSAiTkNfMDU1OTU4LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14bjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14bjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyB2cyBOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14bjUwX2NocjJfcGxvdAoKbXhuNTBfY2hyM19wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14bjUwLCBjaHIgPT0gIk5DXzA1NTk1OS4xIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteG41MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteG41MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgdnMgTi4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteG41MF9jaHIzX3Bsb3QKCm14bjUwX2NocjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhuNTAsIGNociA9PSAiTkNfMDU1OTY2LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMTBfcGxvdAoKbXhuNTBfY2hyMTJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteG41MCwgY2hyID09ICJOQ18wNTU5NjguMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMTJfcGxvdAoKbXhuNTBfY2hyMTlfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteG41MCwgY2hyID09ICJOQ18wNTU5NzUuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhuNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhuNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzIE4uIEF0bGFudGljIEFuYWRyb21vdXMgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfY2hyMTlfcGxvdAoKIyMjIENocm9tb3NvbWUgMiBTcGlrZSBSZWdpb24gIyMjCgpteG41MF9zcGlrZV9wbG90IDwtIG14bjUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OC4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAxNjYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAxNzAwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgdnMgTi4gQXRsYW50aWMgQW5hZHJvbW91cyBBbGV3aWZlIENocm9tb3NvbWUgMiIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhuNTBfc3Bpa2VfcGxvdAoKIyMjIENocm9tb3NvbWUgMyAic3Bpa2UiIHJlZ2lvbiAjIyMKbXhuNTBfY2hyM19zcGlrZV9wbG90IDwtIG14bjUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OS4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAyNDYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAyNDgwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJTb3V0aGVybiB2cyBOb3J0aGVybiBBbmFkcm9tb3VzIEFsZXdpZmUgQ2hyb21vc29tZSAzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteG41MF9jaHIzX3NwaWtlX3Bsb3QKCiMjIyBDaHJvbW9zb21lIDE5ICJzcGlrZSIgcmVnaW9uICMjIwpteG41MF9jaHIxOV9zcGlrZV9wbG90IDwtIG14bjUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk3NS4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAyMjUwMDAwKSAlPiUKICBmaWx0ZXIobWlkUG9zIDw9IDg0MjAwMDApICU+JQogIGdncGxvdCguLAogICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBtaWRQb3MsIAogICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBOc2l0ZXMpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiU291dGhlcm4gdnMgTm9ydGhlcm4gQW5hZHJvbW91cyBBbGV3aWZlIENocm9tb3NvbWUgMTkiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14bjUwX2NocjE5X3NwaWtlX3Bsb3QKYGBgCgpgYGB7ciBNSURBX3hfR1JUTF9wbG90c30KbXhnMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14ZzEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteGcxMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgMTAsMDAwIFN0ZXAgMiwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnMTBfcGxvdAoKbXhnNTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14ZzUwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteGc1MF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZzUwX3Bsb3QKCiMjIyBSZWdpb25zIG9mIEludGVyZXN0ICMjIwojIyBMb29raW5nIGF0IHRoZSBzYW1lIGNocm9tb3NvbWVzIGZvciBNSURBIHZzIE5BVExBICMjCm14ZzUwX2NocjFfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGc1MCwgY2hyID09ICJOQ18wNTU5NTcuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGc1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGc1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZzUwX2NocjFfcGxvdAoKbXhnNTBfY2hyMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZzUwLCBjaHIgPT0gIk5DXzA1NTk1OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnNTBfY2hyMl9wbG90CgpteGc1MF9jaHIzX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhnNTAsIGNociA9PSAiTkNfMDU1OTU5LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGc1MF9jaHIzX3Bsb3QKCm14ZzUwX2NocjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobXhnNTAsIGNociA9PSAiTkNfMDU1OTY2LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbXhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbXhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGc1MF9jaHIxMF9wbG90CgpteGc1MF9jaHIxMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZzUwLCBjaHIgPT0gIk5DXzA1NTk2OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnNTBfY2hyMTJfcGxvdAoKbXhnNTBfY2hyMTlfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGc1MCwgY2hyID09ICJOQ18wNTU5NzUuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGc1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGc1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZzUwX2NocjE5X3Bsb3QKCiMjIyBDaHJvbW9zb21lIDIgU3Bpa2UgUmVnaW9uICMjIwoKbXhnNTBfc3Bpa2VfcGxvdCA8LSBteGc1MCAlPiUKICBmaWx0ZXIoY2hyID09ICJOQ18wNTU5NTguMSIpICU+JQogIGZpbHRlcihtaWRQb3MgPj0gMTY2MDAwMDApICU+JQogIGZpbHRlcihtaWRQb3MgPD0gMTcwMDAwMDApICU+JQogIGdncGxvdCguLAogICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBtaWRQb3MsIAogICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBOc2l0ZXMpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIENocm9tb3NvbWUgMiIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnNTBfc3Bpa2VfcGxvdAoKIyMjIENocm9tb3NvbWUgMyAic3Bpa2UiIHJlZ2lvbiAjIyMKbXhnNTBfY2hyM19zcGlrZV9wbG90IDwtIG14ZzUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OS4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAyNDYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAyNDgwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJTb3V0aGVybiB2cyBOb3J0aGVybiBBbmFkcm9tb3VzIEFsZXdpZmUgQ2hyb21vc29tZSAzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGc1MF9jaHIzX3NwaWtlX3Bsb3QKCiMjIyBDaHJvbW9zb21lIDE5ICJzcGlrZSIgcmVnaW9uICMjIwpteGc1MF9jaHIxOV9zcGlrZV9wbG90IDwtIG14ZzUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk3NS4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAyMjUwMDAwKSAlPiUKICBmaWx0ZXIobWlkUG9zIDw9IDg0MjAwMDApICU+JQogIGdncGxvdCguLAogICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBtaWRQb3MsIAogICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBOc2l0ZXMpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIHZzLiBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUgQ2hyb21vc29tZSAxOSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhnNTBfY2hyMTlfc3Bpa2VfcGxvdApgYGAKCmBgYHtyIE5BVExBX3hfR1JUTF9wbG90c30KbnhnMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG54ZzEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChueGcxMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSAxMCwwMDAgU3RlcCAyLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGcxMF9wbG90CgpueGc1MF9wbG90IDwtIGdncGxvdChkYXRhID0gbnhnNTAsIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKG54ZzUwX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9wbG90CgojIyMgUmVnaW9ucyBvZiBJbnRlcmVzdCAjIyMKIyMgTG9va2luZyBhdCB0aGUgc2FtZSBjaHJvbW9zb21lcyBmb3IgTUlEQSB2cyBOQVRMQSAjIwpueGc1MF9jaHIxX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobnhnNTAsIGNociA9PSAiTkNfMDU1OTU3LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhnNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhnNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBHcmVhdCBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZzUwX2NocjFfcGxvdAoKbnhnNTBfY2hyMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk1OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIyX3Bsb3QKCm54ZzUwX2NocjNfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihueGc1MCwgY2hyID09ICJOQ18wNTU5NTkuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGc1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGc1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhnNTBfY2hyM19wbG90CgpueGc1MF9jaHIxMF9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk2Ni4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIxMF9wbG90CgpueGc1MF9jaHIxMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk2OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIxMl9wbG90CgpueGc1MF9jaHIxOV9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZzUwLCBjaHIgPT0gIk5DXzA1NTk3NS4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZzUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZzUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGc1MF9jaHIxOV9wbG90CgojIEZzdCA+IDAuNzUgQCA1OTQ1MDAwIC0gNTk3NTAwMAoKIyMjIENocm9tb3NvbWUgMiBTcGlrZSBSZWdpb24gIyMjCgpueGc1MF9zcGlrZV9wbG90IDwtIG54ZzUwICU+JQogIGZpbHRlcihjaHIgPT0gIk5DXzA1NTk1OC4xIikgJT4lCiAgZmlsdGVyKG1pZFBvcyA+PSAxNjYwMDAwMCkgJT4lCiAgZmlsdGVyKG1pZFBvcyA8PSAxNzAwMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSBDaHJvbW9zb21lIDIiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZzUwX3NwaWtlX3Bsb3QKCiMjIyBDaHJvbW9zb21lIDMgInNwaWtlIiByZWdpb24gIyMjCm54ZzUwX2NocjNfc3Bpa2VfcGxvdCA8LSBueGc1MCAlPiUKICBmaWx0ZXIoY2hyID09ICJOQ18wNTU5NTkuMSIpICU+JQogIGZpbHRlcihtaWRQb3MgPj0gMjQ2MDAwMDApICU+JQogIGZpbHRlcihtaWRQb3MgPD0gMjQ4MDAwMDApICU+JQogIGdncGxvdCguLAogICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBtaWRQb3MsIAogICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBOc2l0ZXMpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgdnMuIEdyZWF0IExha2VzIExhbmRsb2NrZWQgQWxld2lmZSBDaHJvbW9zb21lIDMiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZzUwX2NocjNfc3Bpa2VfcGxvdAoKIyMjIENocm9tb3NvbWUgMTkgInNwaWtlIiByZWdpb24gIyMjCm54ZzUwX2NocjE5X3NwaWtlX3Bsb3QgPC0gbnhnNTAgJT4lCiAgZmlsdGVyKGNociA9PSAiTkNfMDU1OTc1LjEiKSAlPiUKICBmaWx0ZXIobWlkUG9zID49IDIyNTAwMDApICU+JQogIGZpbHRlcihtaWRQb3MgPD0gODQyMDAwMCkgJT4lCiAgZ2dwbG90KC4sCiAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IG1pZFBvcywgCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE5zaXRlcykpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMocmFuZ2UgPSBjKDAuNSwgMykpICsKICBsYWJzKHggPSAiUG9zaXRpb24iLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyB2cy4gR3JlYXQgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIENocm9tb3NvbWUgMTkiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZzUwX2NocjE5X3NwaWtlX3Bsb3QKYGBgCgpgYGB7ciBNSURBX3hfRklOTF9wbG90c30KbXhmMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IG14ZjEwLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZjEwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZjEwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChteGYxMF9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDEwLDAwMCBTdGVwIDIsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjEwX3Bsb3QKCm14ZjUwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBteGY1MCwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgobXhmNTBfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbXhmNTBfcGxvdAoKIyMjIFJlZ2lvbnMgb2YgSW50ZXJlc3QgIyMjCiMjIExvb2tpbmcgYXQgdGhlIHNhbWUgY2hyb21vc29tZXMgZm9yIE1JREEgdnMgTkFUTEEgIyMKbXhmNTBfY2hyMV9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZjUwLCBjaHIgPT0gIk5DXzA1NTk1Ny4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjUwX2NocjFfcGxvdAoKbXhmNTBfY2hyMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZjUwLCBjaHIgPT0gIk5DXzA1NTk1OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjODY5Y2E4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjUwX2NocjJfcGxvdAoKbXhmNTBfY2hyM19wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZjUwLCBjaHIgPT0gIk5DXzA1NTk1OS4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjUwX2NocjNfcGxvdAoKbXhmNTBfY2hyMTBfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihteGY1MCwgY2hyID09ICJOQ18wNTU5NjYuMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBteGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBteGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJNaWQtQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpteGY1MF9jaHIxMF9wbG90CgpteGY1MF9jaHIxMl9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG14ZjUwLCBjaHIgPT0gIk5DXzA1NTk2OC4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG14ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG14ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk1pZC1BdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjUwX2NocjEyX3Bsb3QKCiMjIyBDaHJvbW9zb21lIDIgU3Bpa2UgUmVnaW9uICMjIwoKbXhmNTBfc3Bpa2VfcGxvdCA8LSBteGY1MCAlPiUKICBmaWx0ZXIoY2hyID09ICJOQ18wNTU5NTguMSIpICU+JQogIGZpbHRlcihtaWRQb3MgPj0gMTY2MDAwMDApICU+JQogIGZpbHRlcihtaWRQb3MgPD0gMTcwMDAwMDApICU+JQogIGdncGxvdCguLAogICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBtaWRQb3MsIAogICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBOc2l0ZXMpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTWlkLUF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSBDaHJvbW9zb21lIDIiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm14ZjUwX3NwaWtlX3Bsb3QKYGBgCgpgYGB7ciBOQVRMQV94X0ZJTkxfcGxvdHN9Cm54ZjEwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBueGYxMCwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGYxMF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGYxMF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgobnhmMTBfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDEwLDAwMCBTdGVwIDIsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZjEwX3Bsb3QKCm54ZjUwX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBueGY1MCwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgobnhmNTBfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGY1MF9wbG90CgojIyMgUmVnaW9ucyBvZiBJbnRlcmVzdCAjIyMKIyMgTG9va2luZyBhdCB0aGUgc2FtZSBjaHJvbW9zb21lcyBmb3IgTUlEQSB2cyBOQVRMQSAjIwpueGY1MF9jaHIxX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBmaWx0ZXIobnhmNTAsIGNociA9PSAiTkNfMDU1OTU3LjEiKSwgCiAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUsIGNvbG9yID0gIiMyNDJiMzUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gbnhmNTBfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gbnhmNTBfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpueGY1MF9jaHIxX3Bsb3QKCm54ZjUwX2NocjJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihueGY1MCwgY2hyID09ICJOQ18wNTU5NTguMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzg2OWNhOCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZjUwX2NocjJfcGxvdAoKbnhmNTBfY2hyM19wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZjUwLCBjaHIgPT0gIk5DXzA1NTk1OS4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhmNTBfY2hyM19wbG90CgpueGY1MF9jaHIxMF9wbG90IDwtIGdncGxvdChkYXRhID0gZmlsdGVyKG54ZjUwLCBjaHIgPT0gIk5DXzA1NTk2Ni4xIiksIAogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0KSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41LCBjb2xvciA9ICIjMjQyYjM1IikgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IG54ZjUwX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IG54ZjUwX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIk4uIEF0bGFudGljIEFuYWRyb21vdXMgdnMgRmluZ2VyIExha2VzIExhbmRsb2NrZWQgQWxld2lmZSIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhmNTBfY2hyMTBfcGxvdAoKbnhmNTBfY2hyMTJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGZpbHRlcihueGY1MCwgY2hyID09ICJOQ18wNTU5NjguMSIpLCAKICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiIzI0MmIzNSIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBueGY1MF9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBueGY1MF9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJOLiBBdGxhbnRpYyBBbmFkcm9tb3VzIHZzIEZpbmdlciBMYWtlcyBMYW5kbG9ja2VkIEFsZXdpZmUiLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCm54ZjUwX2NocjEyX3Bsb3QKCiMjIyBDaHJvbW9zb21lIDIgU3Bpa2UgUmVnaW9uICMjIwoKbnhmNTBfc3Bpa2VfcGxvdCA8LSBueGY1MCAlPiUKICBmaWx0ZXIoY2hyID09ICJOQ18wNTU5NTguMSIpICU+JQogIGZpbHRlcihtaWRQb3MgPj0gMTY2MDAwMDApICU+JQogIGZpbHRlcihtaWRQb3MgPD0gMTcwMDAwMDApICU+JQogIGdncGxvdCguLAogICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBtaWRQb3MsIAogICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBOc2l0ZXMpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIGNvbG9yID0gIiM4NjljYTgiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDMpKSArCiAgbGFicyh4ID0gIlBvc2l0aW9uIiwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTi4gQXRsYW50aWMgQW5hZHJvbW91cyB2cyBGaW5nZXIgTGFrZXMgTGFuZGxvY2tlZCBBbGV3aWZlIENocm9tb3NvbWUgMiIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKbnhmNTBfc3Bpa2VfcGxvdApgYGAKCgpgYGB7ciBzYXZpbmdfcGxvdHN9CiMjIyBVc2luZyBnZ3NhdmUgdG8gc2F2ZSB0aGUgbWFuaGF0dGFuIHBsb3RzLCBvciBhcyBJIHdpbGwgbm93IHJlZmVyIHRvIGl0OiAjIyMKIyBTYXZpbmcgUHJpdmF0ZSBQbG90cyAoUnlhbiBsb2wpICMjCmdnc2F2ZSgiZmlndXJlcy9zbGlkaW5nLXdpbmRvd3MtZnN0L01JREEteC1OQVRMQS1zejUwLWNocm9tMTktc3Bpa2UucG5nIiwgCiAgICAgICBwbG90ID0gbXhuNTBfY2hyMTlfc3Bpa2VfcGxvdCwgCiAgICAgICB3aWR0aCA9IDEwLCAKICAgICAgIGhlaWdodCA9IDQpCmBgYAoK